home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_08_04 / 8n04105a < prev    next >
Text File  |  1990-03-18  |  1KB  |  35 lines

  1.  
  2. Listing 2
  3. =========
  4.  
  5. /* Borrow Memory */
  6.  
  7. /* Returns a pointer to the allocated memory, or NULL */
  8.  
  9. char *borrow(id,need)
  10. register MemBlock *id;        /* Pointer to first block */
  11. register int need;            /* Requested memory size */
  12. {
  13.    register MemBlock *p=id->mb_pres;  /* Present block pointer */
  14.    register int oldoffs;              /* Old offset */
  15.  
  16.    /* Round need up to word multiple */
  17.    need+=need&1;
  18.  
  19.    /* Deal with more memory required */
  20.    if(id->mb_offs+need>id->mb_size) {  /* Too large to fit ? */
  21.       register MemBlock *q;            /* Get another */
  22.       if((q=(MemBlock *)allocate(id->mb_size))==0) 
  23.          return(NULL);
  24.       p->mb_next=q;                    /* Link to new block */
  25.       q->mb_next=NULL;                 /* Mark end of list */
  26.       id->mb_pres=q;                   /* New block is present one */
  27.       id->mb_offs=sizeof(MemBlock *);  /* Reset offset */
  28.       p=q;                             /* Present block */
  29.    }
  30.    oldoffs=id->mb_offs;                /* Record present offset */
  31.    id->mb_offs+=need;                  /* Move offset */
  32.    return((char *)((int)p+oldoffs));   /* Return address of memory */
  33. }
  34.  
  35.